#include "gpio.h"

PORT_GROUP gportin[GPIO_IN_COUNT] = {0};
PORT_GROUP gportout[GPIO_OUT_COUNT] = {0};

void InitgportList(void)
{
    gportin[IO_V1_HOME].port         = V1_HOME_GPIO_Port;
    gportin[IO_V1_HOME].pin          = V1_HOME_Pin;
    gportin[IO_V2_HOME].port         = V2_HOME_GPIO_Port;
    gportin[IO_V2_HOME].pin          = V2_HOME_Pin;
    gportin[IO_V3_HOME].port         = V3_HOME_GPIO_Port;
    gportin[IO_V3_HOME].pin          = V3_HOME_Pin;
    gportin[IO_S1_HOME].port         = S1_HOME_GPIO_Port;
    gportin[IO_S1_HOME].pin          = S1_HOME_Pin;
    gportin[IO_S2_HOME].port         = S2_HOME_GPIO_Port;
    gportin[IO_S2_HOME].pin          = S2_HOME_Pin;
    gportin[IO_R2_HOME].port         = R2_HOME_GPIO_Port;
    gportin[IO_R2_HOME].pin          = R2_HOME_Pin;
    gportin[IO_S1_LIMIT].port        = S1_LIMIT_GPIO_Port;
    gportin[IO_S1_LIMIT].pin         = S1_LIMIT_Pin;
    gportin[IO_S2_LIMIT].port        = S2_LIMIT_GPIO_Port;
    gportin[IO_S2_LIMIT].pin         = S2_LIMIT_Pin;
    gportin[IO_V3_LIMIT].port        = V3_LIMIT_GPIO_Port;
    gportin[IO_V3_LIMIT].pin         = V3_LIMIT_Pin;
    gportin[IO_IMPORTL_READY].port   = IMPORTL_READY_GPIO_Port;
    gportin[IO_IMPORTL_READY].pin    = IMPORTL_READY_Pin;
    gportin[IO_IMPORTR_READY].port   = IMPORTR_READY_GPIO_Port;
    gportin[IO_IMPORTR_READY].pin    = IMPORTR_READY_Pin;
    gportin[IO_EXPORT_READY].port    = EXPORT_READY_GPIO_Port;
    gportin[IO_EXPORT_READY].pin     = EXPORT_READY_Pin;
    gportin[IO_STARTL_PRESSED].port  = STARTL_PRESSED_GPIO_Port;
    gportin[IO_STARTL_PRESSED].pin   = STARTL_PRESSED_Pin;
    gportin[IO_STARTR_PRESSED].port  = STARTR_PRESSED_GPIO_Port;
    gportin[IO_STARTR_PRESSED].pin   = STARTR_PRESSED_Pin;
    gportin[IO_STOP_PRESSED].port    = STOP_PRESSED_GPIO_Port;
    gportin[IO_STOP_PRESSED].pin     = STOP_PRESSED_Pin;
    gportin[IO_TUBE_EXIST].port      = TUBE_EXIST_GPIO_Port;
    gportin[IO_TUBE_EXIST].pin       = TUBE_EXIST_Pin;
    gportin[IO_RACK_FIXED].port      = RACK_FIXED_GPIO_Port;
    gportin[IO_RACK_FIXED].pin       = RACK_FIXED_Pin;
    gportin[IO_SWITCH1].port         = SWITCH1_GPIO_Port;
    gportin[IO_SWITCH1].pin          = SWITCH1_Pin;
    gportin[IO_SWITCH2].port         = SWITCH2_GPIO_Port;
    gportin[IO_SWITCH2].pin          = SWITCH2_Pin;
    gportin[IO_SWITCH3].port         = SWITCH3_GPIO_Port;
    gportin[IO_SWITCH3].pin          = SWITCH3_Pin;
    gportin[IO_SWITCH4].port         = SWITCH4_GPIO_Port;
    gportin[IO_SWITCH4].pin          = SWITCH4_Pin;
    gportin[IO_PREL_EXIST].port      = PREL_EXIST_GPIO_Port;
    gportin[IO_PREL_EXIST].pin       = PREL_EXIST_Pin;
    gportin[IO_PRER_EXIST].port      = PRER_EXIST_GPIO_Port;
    gportin[IO_PRER_EXIST].pin       = PRER_EXIST_Pin;
    gportin[IO_BASKETL_EXIST].port   = BASKET_EXIST_L_GPIO_Port;
    gportin[IO_BASKETL_EXIST].pin    = BASKET_EXIST_L_Pin;
    gportin[IO_BASKETR_EXIST].port   = BASKET_EXIST_R_GPIO_Port;
    gportin[IO_BASKETR_EXIST].pin    = BASKET_EXIST_R_Pin;
    gportin[IO_HAT_EXIST].port       = HAT_EXIST_GPIO_Port;
    gportin[IO_HAT_EXIST].pin        = HAT_EXIST_Pin;
    gportin[IO_RACK_ARRIVE].port     = RACK_ARRIVE_GPIO_Port;
    gportin[IO_RACK_ARRIVE].pin      = RACK_ARRIVE_Pin;

    gportin[IO_S1_HOME].inverse = 1;
    gportin[IO_S2_HOME].inverse = 1;
    gportin[IO_V1_HOME].inverse = 1;
    gportin[IO_V2_HOME].inverse = 1;
    gportin[IO_V3_HOME].inverse = 1;
    gportin[IO_R2_HOME].inverse = 1;
    gportin[IO_S1_LIMIT].inverse = 1;
    gportin[IO_S2_LIMIT].inverse = 1;
    gportin[IO_V3_LIMIT].inverse = 1;
    gportin[IO_IMPORTL_READY].inverse = 0;
    gportin[IO_IMPORTR_READY].inverse = 0;
    gportin[IO_EXPORT_READY].inverse = 0;
    gportin[IO_RACK_FIXED].inverse = 0;
    gportin[IO_PREL_EXIST].inverse = 0;
    gportin[IO_PRER_EXIST].inverse = 0;
    gportin[IO_TUBE_EXIST].inverse = 1;
    gportin[IO_HAT_EXIST].inverse = 1;

    gportout[IO_S1_LOCK].port         = S1_LOCK_GPIO_Port;
    gportout[IO_S1_LOCK].pin          = S1_LOCK_Pin;
    gportout[IO_S1_CW].port           = S1_CW_GPIO_Port;
    gportout[IO_S1_CW].pin            = S1_CW_Pin;
    gportout[IO_S1_EN].port           = S1_EN_GPIO_Port;
    gportout[IO_S1_EN].pin            = S1_EN_Pin;
    gportout[IO_S2_LOCK].port         = S2_LOCK_GPIO_Port;
    gportout[IO_S2_LOCK].pin          = S2_LOCK_Pin;
    gportout[IO_S2_CW].port           = S2_CW_GPIO_Port;
    gportout[IO_S2_CW].pin            = S2_CW_Pin;
    gportout[IO_S2_EN].port           = S2_EN_GPIO_Port;
    gportout[IO_S2_EN].pin            = S2_EN_Pin;
    gportout[IO_V1_LOCK].port         = V1_LOCK_GPIO_Port;
    gportout[IO_V1_LOCK].pin          = V1_LOCK_Pin;
    gportout[IO_V1_CW].port           = V1_CW_GPIO_Port;
    gportout[IO_V1_CW].pin            = V1_CW_Pin;
    gportout[IO_V1_EN].port           = V1_EN_GPIO_Port;
    gportout[IO_V1_EN].pin            = V1_EN_Pin;
    gportout[IO_V2_LOCK].port         = V2_LOCK_GPIO_Port;
    gportout[IO_V2_LOCK].pin          = V2_LOCK_Pin;
    gportout[IO_V2_CW].port           = V2_CW_GPIO_Port;
    gportout[IO_V2_CW].pin            = V2_CW_Pin;
    gportout[IO_V2_EN].port           = V2_EN_GPIO_Port;
    gportout[IO_V2_EN].pin            = V2_EN_Pin;
    gportout[IO_V3_LOCK].port         = V3_LOCK_GPIO_Port;
    gportout[IO_V3_LOCK].pin          = V3_LOCK_Pin;
    gportout[IO_V3_CW].port           = V3_CW_GPIO_Port;
    gportout[IO_V3_CW].pin            = V3_CW_Pin;
    gportout[IO_V3_EN].port           = V3_EN_GPIO_Port;
    gportout[IO_V3_EN].pin            = V3_EN_Pin;
    gportout[IO_T1_LOCK].port         = T1_LOCK_GPIO_Port;
    gportout[IO_T1_LOCK].pin          = T1_LOCK_Pin;
    gportout[IO_T1_CW].port           = T1_CW_GPIO_Port;
    gportout[IO_T1_CW].pin            = T1_CW_Pin;
    gportout[IO_T1_EN].port           = T1_EN_GPIO_Port;
    gportout[IO_T1_EN].pin            = T1_EN_Pin;
    gportout[IO_R1_LOCK].port         = R1_LOCK_GPIO_Port;
    gportout[IO_R1_LOCK].pin          = R1_LOCK_Pin;
    gportout[IO_R1_CW].port           = R1_CW_GPIO_Port;
    gportout[IO_R1_CW].pin            = R1_CW_Pin;
    gportout[IO_R1_EN].port           = R1_EN_GPIO_Port;
    gportout[IO_R1_EN].pin            = R1_EN_Pin;
    gportout[IO_R2_LOCK].port         = R2_LOCK_GPIO_Port;
    gportout[IO_R2_LOCK].pin          = R2_LOCK_Pin;
    gportout[IO_R2_CW].port           = R2_CW_GPIO_Port;
    gportout[IO_R2_CW].pin            = R2_CW_Pin;
    gportout[IO_R2_EN].port           = R2_EN_GPIO_Port;
    gportout[IO_R2_EN].pin            = R2_EN_Pin;
    gportout[IO_STATELED].port        = LED_GPIO_Port;
    gportout[IO_STATELED].pin         = LED_Pin;
    gportout[IO_STRIP_LED].port       = STRIP_LED_GPIO_Port;
    gportout[IO_STRIP_LED].pin        = STRIP_LED_Pin;
    gportout[IO_STARTL_LED].port      = STARTL_LED_GPIO_Port;
    gportout[IO_STARTL_LED].pin       = STARTL_LED_Pin;
    gportout[IO_STARTR_LED].port      = STARTR_LED_GPIO_Port;
    gportout[IO_STARTR_LED].pin       = STARTR_LED_Pin;
    gportout[IO_NTRIG].port           = NTRIGED_GPIO_Port;
    gportout[IO_NTRIG].pin            = NTRIGED_Pin;


    gportout[IO_S1_EN].inverse = 1;
    gportout[IO_S2_EN].inverse = 1;
    gportout[IO_V1_EN].inverse = 1;
    gportout[IO_V2_EN].inverse = 1;
    gportout[IO_V3_EN].inverse = 1;
    gportout[IO_T1_EN].inverse = 1;
    gportout[IO_R1_EN].inverse = 1;
    gportout[IO_R2_EN].inverse = 1;

    gportout[IO_S1_CW].inverse = 1;
    gportout[IO_S2_CW].inverse = 0;
    gportout[IO_V1_CW].inverse = 0;
    gportout[IO_V2_CW].inverse = 0;
    gportout[IO_V3_CW].inverse = 0;
    gportout[IO_T1_CW].inverse = 0;
    gportout[IO_R1_CW].inverse = 0;
    gportout[IO_R2_CW].inverse = 1;
    gportout[IO_NTRIG].inverse = 1;
}

void MX_GPIO_Init(void)
{
    InitgportList();
  /* GPIO Ports Clock Enable */
    rcu_periph_clock_enable(RCU_GPIOH);
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOC);
    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_GPIOD);
    rcu_periph_clock_enable(RCU_GPIOE);

    gpio_mode_set(gportin[IO_S1_HOME].port,  GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_S1_HOME].pin); // 左输入区推入电机复位光耦
    gpio_mode_set(gportin[IO_S2_HOME].port,  GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_S2_HOME].pin); // 右输入区推入电机复位光耦
    gpio_mode_set(gportin[IO_V1_HOME].port,  GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_V1_HOME].pin); // 左输入区闸刀电机复位光耦
    gpio_mode_set(gportin[IO_V2_HOME].port,  GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_V2_HOME].pin); // 右输入区闸刀电机复位光耦
    gpio_mode_set(gportin[IO_V3_HOME].port,  GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_V3_HOME].pin); // 右轨道输出口闸刀电机复位光耦
    gpio_mode_set(gportin[IO_R2_HOME].port,  GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_R2_HOME].pin); 
    gpio_mode_set(gportin[IO_S1_LIMIT].port, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_S1_LIMIT].pin);// 左输入区推入电机限位光耦
    gpio_mode_set(gportin[IO_S2_LIMIT].port, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_S2_LIMIT].pin);// 右输入区推入电机限位光耦
    gpio_mode_set(gportin[IO_V3_LIMIT].port, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_V3_LIMIT].pin);
    
    gpio_mode_set(gportin[IO_IMPORTL_READY].port,   GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_IMPORTL_READY].pin);
    gpio_mode_set(gportin[IO_IMPORTR_READY].port,   GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_IMPORTR_READY].pin);
    gpio_mode_set(gportin[IO_EXPORT_READY].port,    GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, gportin[IO_EXPORT_READY].pin);
    gpio_mode_set(gportin[IO_TUBE_EXIST].port,      GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, gportin[IO_TUBE_EXIST].pin);
    gpio_mode_set(gportin[IO_RACK_FIXED].port,      GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, gportin[IO_RACK_FIXED].pin);
    gpio_mode_set(gportin[IO_STARTL_PRESSED].port,  GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_STARTL_PRESSED].pin);
    gpio_mode_set(gportin[IO_STARTR_PRESSED].port,  GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_STARTR_PRESSED].pin);
    gpio_mode_set(gportin[IO_STOP_PRESSED].port,    GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_STOP_PRESSED].pin);

    gpio_mode_set(gportin[IO_SWITCH1].port,        GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_SWITCH1].pin);
    gpio_mode_set(gportin[IO_SWITCH2].port,        GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_SWITCH2].pin);
    gpio_mode_set(gportin[IO_SWITCH3].port,        GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_SWITCH3].pin);
    gpio_mode_set(gportin[IO_SWITCH4].port,        GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_SWITCH4].pin);
    gpio_mode_set(gportin[IO_SWITCH5].port,        GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_SWITCH5].pin);
    gpio_mode_set(gportin[IO_SWITCH6].port,        GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_SWITCH6].pin);

    gpio_mode_set(gportin[IO_PREL_EXIST].port,     GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, gportin[IO_PREL_EXIST].pin);
    gpio_mode_set(gportin[IO_PRER_EXIST].port,     GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, gportin[IO_PRER_EXIST].pin);
    gpio_mode_set(gportin[IO_BASKETL_EXIST].port,  GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_BASKETL_EXIST].pin);
    gpio_mode_set(gportin[IO_BASKETL_EXIST].port,  GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, gportin[IO_BASKETR_EXIST].pin);
    gpio_mode_set(gportin[IO_HAT_EXIST].port,      GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, gportin[IO_HAT_EXIST].pin);
    gpio_mode_set(gportin[IO_RACK_ARRIVE].port,      GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, gportin[IO_RACK_ARRIVE].pin);

    gpio_mode_set(gportout[IO_S1_LOCK].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_S1_LOCK].pin);
    gpio_mode_set(gportout[IO_S2_LOCK].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_S2_LOCK].pin);
    gpio_mode_set(gportout[IO_V1_LOCK].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_V1_LOCK].pin);
    gpio_mode_set(gportout[IO_V2_LOCK].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_V2_LOCK].pin);
    gpio_mode_set(gportout[IO_V3_LOCK].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_V3_LOCK].pin);
    gpio_mode_set(gportout[IO_T1_LOCK].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_T1_LOCK].pin);
    gpio_mode_set(gportout[IO_R1_LOCK].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_R1_LOCK].pin);
    gpio_mode_set(gportout[IO_R2_LOCK].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_R2_LOCK].pin);

    gpio_output_options_set(gportout[IO_S1_LOCK].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_S1_LOCK].pin);
    gpio_output_options_set(gportout[IO_S2_LOCK].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_S2_LOCK].pin);
    gpio_output_options_set(gportout[IO_V1_LOCK].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_V1_LOCK].pin);
    gpio_output_options_set(gportout[IO_V2_LOCK].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_V2_LOCK].pin);
    gpio_output_options_set(gportout[IO_V3_LOCK].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_V3_LOCK].pin);
    gpio_output_options_set(gportout[IO_T1_LOCK].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_T1_LOCK].pin);
    gpio_output_options_set(gportout[IO_R1_LOCK].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_R1_LOCK].pin);
    gpio_output_options_set(gportout[IO_R2_LOCK].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_R2_LOCK].pin);

    gpio_mode_set(gportout[IO_S1_CW].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_S1_CW].pin);
    gpio_mode_set(gportout[IO_S2_CW].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_S2_CW].pin);
    gpio_mode_set(gportout[IO_V1_CW].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_V1_CW].pin);
    gpio_mode_set(gportout[IO_V2_CW].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_V2_CW].pin);
    gpio_mode_set(gportout[IO_V3_CW].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_V3_CW].pin);
    gpio_mode_set(gportout[IO_T1_CW].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_T1_CW].pin);
    gpio_mode_set(gportout[IO_R1_CW].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_R1_CW].pin);
    gpio_mode_set(gportout[IO_R2_CW].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_R2_CW].pin);
    
    gpio_output_options_set(gportout[IO_S1_CW].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_S1_CW].pin);
    gpio_output_options_set(gportout[IO_S2_CW].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_S2_CW].pin);
    gpio_output_options_set(gportout[IO_V1_CW].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_V1_CW].pin);
    gpio_output_options_set(gportout[IO_V2_CW].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_V2_CW].pin);
    gpio_output_options_set(gportout[IO_V3_CW].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_V3_CW].pin);
    gpio_output_options_set(gportout[IO_T1_CW].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_T1_CW].pin);
    gpio_output_options_set(gportout[IO_R1_CW].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_R1_CW].pin);
    gpio_output_options_set(gportout[IO_R2_CW].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_R2_CW].pin);

    gpio_mode_set(gportout[IO_S1_EN].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_S1_EN].pin);
    gpio_mode_set(gportout[IO_S2_EN].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_S2_EN].pin);
    gpio_mode_set(gportout[IO_V1_EN].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_V1_EN].pin);
    gpio_mode_set(gportout[IO_V2_EN].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_V2_EN].pin);
    gpio_mode_set(gportout[IO_V3_EN].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_V3_EN].pin);
    gpio_mode_set(gportout[IO_T1_EN].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_T1_EN].pin);
    gpio_mode_set(gportout[IO_R1_EN].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_R1_EN].pin);
    gpio_mode_set(gportout[IO_R2_EN].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_R2_EN].pin);

    gpio_output_options_set(gportout[IO_S1_EN].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_S1_EN].pin);
    gpio_output_options_set(gportout[IO_S2_EN].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_S2_EN].pin);
    gpio_output_options_set(gportout[IO_V1_EN].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_V1_EN].pin);
    gpio_output_options_set(gportout[IO_V2_EN].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_V2_EN].pin);
    gpio_output_options_set(gportout[IO_V3_EN].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_V3_EN].pin);
    gpio_output_options_set(gportout[IO_T1_EN].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_T1_EN].pin);
    gpio_output_options_set(gportout[IO_R1_EN].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_R1_EN].pin);
    gpio_output_options_set(gportout[IO_R2_EN].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_R2_EN].pin);

    gpio_mode_set(gportout[IO_STATELED].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_STATELED].pin);
    gpio_output_options_set(gportout[IO_STATELED].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_STATELED].pin);
    gpio_mode_set(gportout[IO_STRIP_LED].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_STRIP_LED].pin);
    gpio_output_options_set(gportout[IO_STRIP_LED].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_STRIP_LED].pin);

    gpio_mode_set(gportout[IO_STARTL_LED].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_STARTL_LED].pin);
    gpio_output_options_set(gportout[IO_STARTL_LED].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_STARTL_LED].pin);
    gpio_mode_set(gportout[IO_STARTR_LED].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_STARTR_LED].pin);
    gpio_output_options_set(gportout[IO_STARTR_LED].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_STARTR_LED].pin);

    gpio_mode_set(gportout[IO_NTRIG].port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,gportout[IO_NTRIG].pin);
    gpio_output_options_set(gportout[IO_NTRIG].port, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,gportout[IO_NTRIG].pin);
}
